import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;

import java.sql.SQLException;

public class DruidDemo {
    public static void main(String[] args) throws SQLException {
        //数据源的初始化
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf-8");
        dataSource.setUsername("root");
        dataSource.setPassword("20050324");
        dataSource.setInitialSize(5);//初始连接池大小
        dataSource.setMaxActive(10);//最大连接池大小
        dataSource.setMinIdle(5);//最小连接池大小
        dataSource.setMaxWait(5000);//最大等待时间
        dataSource.setValidationQuery("select 1");//验证连接是否可用
        dataSource.setTestOnBorrow(true);//在获取连接的时候检查是否可用
        dataSource.setTestOnReturn(true);//在归还的时候检查是否可用
        dataSource.setTestWhileIdle(true);//在空闲时检查连接是否可用
        dataSource.setTimeBetweenEvictionRunsMillis(3000);//运行空闲连接检查的时间间隔
        dataSource.setMinEvictableIdleTimeMillis(60000);//连接保持空闲的最小时间，达到此值后空闲连接将关闭
        dataSource.setPoolPreparedStatements(true);//是否缓存preparedStatement，也就是PSCache
        dataSource.setMaxOpenPreparedStatements(20);//preparedStatement 缓存的大小
        dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);//每个连接池可以缓存的 preparedStatement 数量
        dataSource.setFilters("stat");//监控
        dataSource.setLogAbandoned(true);//开启泄露检测
        dataSource.setRemoveAbandoned(true);//检测是否泄露
        dataSource.setRemoveAbandonedTimeout(60);//泄露检测时间
        DruidPooledConnection connection = dataSource.getConnection();
        if(connection!=null){
            System.out.println("连接成功");
        }
    }
}
